package com.iot.mqtt;

import com.iot.service.Tdecive_handleService;
import com.iot.util.ApplicationContextHelper;
import com.iot.util.Common;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;

import java.util.Map;


/**
 * 发布消息的回调类
 * <p>
 * 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
 * 每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。
 * 在回调中，将它用来标识已经启动了该回调的哪个实例。
 * 必须在回调类中实现三个方法：
 * <p>
 * public void messageArrived(MqttTopic topic, MqttMessage message)接收已经预订的发布。
 * <p>
 * public void connectionLost(Throwable cause)在断开连接时调用。
 * <p>
 * public void deliveryComplete(MqttDeliveryToken token))
 * 接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
 * 由 MqttClient.connect 激活此回调。
 */
public class ServerCallback implements MqttCallback {
    private Map<String, OpenCommand> subscribeInfo;
    Tdecive_handleService service = ApplicationContextHelper.getBean(Tdecive_handleService.class);
    private Server server;

    public ServerCallback(Server server) {

        this.server = server;
    }
    public void connectionLost(Throwable cause) {
        // 连接丢失后，一般在这里面进行重连
        //System.out.println("连接断开，可以做重连");
        while (!server.server.isConnected()) {
            try {
                System.out.println("server连接断开，可以做重连 "+ Common.getNowTime());
                Thread.sleep(1000);
                server.connect();
                System.out.println("server连接断开，重连完成 "+ Common.getNowTime());
                break;
                //client.connect(options);
                //client.subscribe(topicFilters, qos);

            } catch (Exception e) {
                e.printStackTrace();
            }
//            try {
//                Thread.sleep(1000);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
        }
    }

    public void deliveryComplete(IMqttDeliveryToken token) {
        System.out.println("deliveryComplete---------" + token.isComplete());
    }

    public void messageArrived(String topic, MqttMessage message) throws Exception {


    }

}

